AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成する
データアナリティクス事業本部のueharaです。
今回は、AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成してみたいと思います。
はじめに
今回はLambdaのランタイムはPython 3.9
を想定することにします。
こちらのページに記載の通り、Python 3.9
ランタイムは「Amazon Linux 2」上で動作しています。
したがって、基本的にはLambda Layer用のzipファイルについてもAmazon Linux 2上で作成した方が安全です。
Amazon LinuxはDockerイメージが公開されているため、当該イメージを用いてzipファイルを作成することもできますが、今回はAWS CloudShellを利用してLayerを作成する方法をご紹介します。
CloudShellを利用することで、ローカル環境にレイヤー作成用の環境を用意せずにLambda Layerを作成することが可能です。
AWS CloudShellについて
AWS CloudShellはWebブラウザ(AWSマネージメントコンソール)上からお手軽にシェルを実行出来るサービスです。
ローカルにあるファイルを画面上からアップロードすることもできます。
2023年9月現在、CloudShellのOSは「Amazon Linux 2」となっております。
使い方は非常に簡単で、マネジメントコンソールから「CloudShell」を検索し、サービスに移動するだけでシェルの利用を開始することができます。
念のため、OSを確認したところ、以下のようにAmazon Linux 2であることが確認できました。
$ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"
ちなみに、アーキテクチャはx86_64
となっていました。
$ uname -m x86_64
CloudShellを使ったLambda Layerの作成
CloudShellへのPython 3.9のインストール
まず、CloudShellへPython 3.9のインストールをします。
インストール方法については、以前以下の記事でご紹介しております。
上記でご紹介しているBashスクリプトの実行が完了すると、CloudShell上でPython 3.9が利用できるようになっています。
$ which python3.9 ~/.local/bin/python3.9 $ which pip3.9 ~/.local/bin/pip3.9
Lambda Layer作成用のスクリプトの実行
まず、インストールしたいライブラリを記載したrequirements.txt
を作成し、CloudShell上にアップロードします。
numpy==1.23.0 pandas==1.4.3 python-dateutil==2.8.2 pytz==2022.1 pyarrow==8.0.0 six==1.16.0
次に、以下のLambda Layer作成用のスクリプトを作成し、こちらもCloudShell上にアップロードします。
#!/bin/bash -eu BUCKETNAME=$1 LAYERNAME=$2 SRC=./python DIST=./layer.zip pip3.9 install -t ${SRC} -r requirements.txt rm -f ${DIST} zip -q -r ${DIST} ${SRC} aws s3 cp ./layer.zip s3://$BUCKETNAME/layer/layer.zip aws lambda publish-layer-version \ --layer-name $LAYERNAME \ --compatible-runtimes python3.9 \ --content S3Bucket=$BUCKETNAME,S3Key=layer/layer.zip
この時点で、CloudShell上のファイルは次のようになっていると思います。
あとは、以下のコマンドでスクリプトを実行するだけでLambda Layerの作成ができます。
※S3のバケットは事前に作成済みであることを想定します
$ bash make_lambda_layer.sh <zipファイルを保存するS3のバケット名> <Lambda Layer名> # 例: bash make_lambda_layer.sh test-uehara-bucket test-uehara-layer
実行が完了すると、以下の通りLambda Layerが作成できていることを確認できます。
最後に
今回は、今回は、AWS CloudShellを利用して簡単にAWS Lambda (Python)のLambda Layerを作成してみました。
参考になりましたら幸いです。